Subject: TS

logo

1.1 Overview of microbial community composition

Figure 1 is an interactive figure showing the microbial community composition in each collected sample. Here, each color and shade corresponds to a different genus. For reference, domestic dogs (Canis familiaris) and gray wolves (Canis lupus) are different species that belong to the same genus (Canis).

You can interact with this figure by:

Figure 1: Microbial community composition of collected saliva, stool, and CapScan samples. CapScan samples are ordered from proximal to distal intestine (i.e., increasing distance from mouth). Taxonomic composition is reported at the genus rank. Genera present at <1% relative abundance across all samples are reported as “Other genera”. Note: Blue = Firmicutes; Yellow = Actinomycetes; Green = Bacteroidetes; Red = Proteobacteria; Purple = all other phyla. Shades of the same color (except purple) correspond to different genera from the same phylum.



1.2 High-resolution snapshot of community composition

Figure 2 is an interactive figure showing the microbial community composition at higher taxononomic resolution. Here, each row corresponds to a unique microbe.

You can interact with this figure by:



Figure 2: Heat map showing relative abundance of microbes in each sample (N = 266 total identified). Each row corresponds to a unique microbe and each column corresponds to an individual sample. Note the relative abundance colorscale is in log units.



1.3 Notable microbes detected



1.4 References

Kanki, M., Yoda, T., Tsukamoto, T., and Shibata, T. (2002) Klebsiella pneumoniae produces no histamine: Raoultella planticola and Raoultella omithinolytica strains are histamine producers. Appl Environ Microbiol 68: 3462–3466.

Kaur, C.P., Vadivelu, J., and Chandramathi, S. (2018) Impact of Klebsiella pneumoniae in lower gastrointestinal tract diseases. J Dig Dis 19: 262–271.

LS0tCnRpdGxlOiAiVGF4b25vbWljIHByb2ZpbGluZyBvZiBiYWN0ZXJpYWwgYW5kIGFyY2hhZWFsIGNvbW11bml0aWVzIGZyb20gc2FsaXZhLCBzdG9vbCwgYW5kIENhcFNjYW4tc2FtcGxlZCBndXQgbWV0YWdlbm9tZXMiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCi0tLQoKIyMjIDxiPjxpPlN1YmplY3Q6IFRTPC9iPjwvaT4KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciBhZGQgbG9nbywgZWNobyA9IEZBTFNFfQpsb2dvX3BhdGggPC0gIi4uL2xvZ28vZW52aXZvLnN2ZyIKCmh0bWx0b29sczo6aW1nKHNyYyA9IGtuaXRyOjppbWFnZV91cmkobG9nb19wYXRoKSwgCiAgICAgICAgICAgICAgIGFsdCA9ICJsb2dvIiwgCiAgICAgICAgICAgICAgIHN0eWxlID0gInBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgcmlnaHQ6MDsgcGFkZGluZzoxMHB4OyB3aWR0aDogMTQ1cHg7IGhlaWdodDogNDJweCIpCmBgYAoKYGBge3IgbG9hZCBwYWNrYWdlcywgaW5jbHVkZSA9IEZBTFNFfQojIExpc3QgcmVxdWlyZWQgcGFja2FnZXMKY3JhblBhY2thZ2VzIDwtIGMoIkJpb2NNYW5hZ2VyIiwgImdncGxvdDIiLCAiZHBseXIiLCAidGlkeXIiLAogICAgICAgICAgICAgICAgICAiYXBlIiwgImdncGxvdDIiLCAicmVzaGFwZTIiLCAicGxvdGx5IiwgImhlYXRtYXBseSIpCmJpb2NQYWNrYWdlcyA8LSBjKCJwaHlsb3NlcSIsICJCaW9zdHJpbmdzIikKCiMgSW5zdGFsbCBtaXNzaW5nIENSQU4gcGFja2FnZXMKaW5zdGFsbGVkQ1JBTiA8LSBjcmFuUGFja2FnZXMgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkKaWYgKGFueShpbnN0YWxsZWRDUkFOID09IEZBTFNFKSkgewogIGluc3RhbGwucGFja2FnZXMoY3JhblBhY2thZ2VzWyFpbnN0YWxsZWRDUkFOXSwKICAgICAgICAgICAgICAgICAgIHJlcG9zID0gJ2h0dHA6Ly9jcmFuLnVzLnItcHJvamVjdC5vcmcnKQp9CgojIEluc3RhbGwgbWlzc2luZyBCaW9jb25kdWN0b3IgcGFja2FnZXMKaW5zdGFsbGVkQmlvYyA8LSBiaW9jUGFja2FnZXMgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkKaWYgKGFueShpbnN0YWxsZWRCaW9jID09IEZBTFNFKSkgewogIEJpb2NNYW5hZ2VyOjppbnN0YWxsKGJpb2NQYWNrYWdlc1shaW5zdGFsbGVkQmlvY10pCn0KCiMgTG9hZCBwYWNrYWdlcwpsYXBwbHkoYyhjcmFuUGFja2FnZXMsIGJpb2NQYWNrYWdlcyksIGxpYnJhcnksIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKYGBgCgpgYGB7ciBsb2FkIGRhdGEsIGluY2x1ZGUgPSBGQUxTRX0KIyBMb2FkIENvc21vc0lEIGRhdGEgYW5kIGZvcm1hdHRlZCBtZXRhZGF0YQpjb3Ntb3MgPC0gcmVhZC5jc3YoZmlsZSA9ICIuLi9kYXRhL0NQMDQ2MThfY29zbW9zaWRfMjAyMjA5MDYuY3N2IikKbWV0YSA8LSByZWFkLmNzdihmaWxlID0gIi4uL2RhdGEvQ1AwNDYxOF9tZXRhZGF0YS5jc3YiKQpgYGAKCmBgYHtyIGZvcm1hdCBkYXRhLCBpbmNsdWRlID0gRkFMU0V9CiMgUHJlcGFyZSB0YXhfdGFibGUgYW5kIG90dV90YWJsZSBvYmplY3RzCnRheCA8LSBjb3Ntb3MgJT4lCiAgc2VsZWN0KFBoeWx1bSwgQ2xhc3MsIE9yZGVyLCBGYW1pbHksIEdlbnVzLCBTcGVjaWVzLCBTdHJhaW4pICU+JQogIGFzLm1hdHJpeCAlPiUKICB0YXhfdGFibGUKCnN0YXJ0X2luZCA8LSBncmVwKCJTdHJhaW4iLCBjb2xuYW1lcyhjb3Ntb3MpKSsxCnN0b3BfaW5kIDwtIG5jb2woY29zbW9zKS0yCmFidW5kYW5jZV9zY29yZXMgPC0gY29zbW9zWyxzdGFydF9pbmQ6c3RvcF9pbmRdICU+JSBvdHVfdGFibGUoLiwgdGF4YV9hcmVfcm93cyA9IFRSVUUpCgojIFJlZm9ybWF0IHNhbXBsZSBuYW1lcyBhbmQgbWV0YWRhdGEgc2FtcGxlIG5hbWVzIHNvIHRoZXkgbWF0Y2gKY29sbmFtZXMoYWJ1bmRhbmNlX3Njb3JlcykgPC0gY29sbmFtZXMoYWJ1bmRhbmNlX3Njb3JlcykgJT4lCiAgZ3N1YigiWCIsICIiLCAuKSAlPiUKICBnc3ViKCJfLioiLCAiIiwgLikgJT4lCiAgcGFzdGUwKCJFQl8iLCAuKQoKcm93Lm5hbWVzKG1ldGEpIDwtIG1ldGEgJT4lCiAgcHVsbChTYW1wbGVfbnVtYmVyKSAlPiUKICBwYXN0ZTAoIkVCXyIsIC4pCgpzYW1fZGF0YSA8LSBzYW1wbGVfZGF0YShtZXRhKQpgYGAKCmBgYHtyIGJ1aWxkIHBoeWxvc2VxLCBpbmNsdWRlID0gRkFMU0V9CiMgQnVpbGQgcGh5bG9zZXEgb2JqZWN0CnBzIDwtIHBoeWxvc2VxKHRheCwgYWJ1bmRhbmNlX3Njb3Jlcywgc2FtX2RhdGEpCmBgYAoKYGBge3IgdHJhbnNmb3JtIGRhdGEsIGluY2x1ZGUgPSBGQUxTRX0KIyBMb2cgdHJhbnNmb3JtCnBzTG9nIDwtIHBzICU+JSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyguLCBmdW5jdGlvbih4KSBsb2coeCArIDEsIGJhc2UgPSAxMCkpCgojIFJlbGF0aXZlIGFidW5kYW5jZSB0cmFuc2Zvcm0KcHNSQSA8LSBwcyAlPiUgdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMoLiwgZnVuY3Rpb24oeCkgeC9zdW0oeCkqMTAwKQpgYGAKCmBgYHtyIHJhbmsgcGh5bGEsIGluY2x1ZGUgPSBGQUxTRX0KcGh5X3JhbmsgPC0gcHNSQSAlPiUKICB0YXhfZ2xvbSguLCB0YXhyYW5rID0gIlBoeWx1bSIpICU+JQogIHBzbWVsdCAlPiUKICBncm91cF9ieShQaHlsdW0pICU+JQogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oQWJ1bmRhbmNlKSkKCnBoeV9yYW5rICU+JSBhcnJhbmdlKGRlc2MobWVkaWFuKSkKYGBgCgpgYGB7ciBzdWJqZWN0IHN1YnNldCwgaW5jbHVkZSA9IEZBTFNFfQojIFNldCBzdWJqZWN0CnN1YmplY3QgPC0gIlRTIgoKIyBTdWJzZXQgdG8gc3ViamVjdCBzYW1wbGVzIGFuZCBkcm9wIG1pc3NpbmcgdGF4YQpwc1N1YiA8LSBzdWJzZXRfc2FtcGxlcyhwcywgU3ViamVjdCA9PSBzdWJqZWN0KSAlPiUKICBwcnVuZV90YXhhKHRheGFfc3VtcyguKSA+IDAsIC4pCgojIEFkZCBwbG90IGxhYmVsIGZvciBlYWNoIHNhbXBsZQpzYW1wbGVfZGF0YShwc1N1YikkUGxvdF9sYWJlbCA8LSBwYXN0ZTAoc2FtcGxlX25hbWVzKHBzU3ViKSwgIiAoIiwgc2FtcGxlX2RhdGEocHNTdWIpJFNhbXBsZV90eXBlLCAiKSIpCgojIFJlbGF0aXZlIGFidW5kYW5jZSB0cmFuc2Zvcm0KcHNTdWJfcmEgPC0gcHNTdWIgJT4lIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKC4sIGZ1bmN0aW9uKHgpIHgvc3VtKHgpKjEwMCkKYGBgCgpgYGB7ciBwbG90IGJhciwgaW5jbHVkZSA9IEZBTFNFfQojIERlZmluZSBOT1QgSU4gb3BlcmF0b3IKJyUhaW4lJyA8LSBmdW5jdGlvbih4LHkpISgnJWluJScoeCx5KSkKCiMgQWdnbG9tZXJhdGUgYXQgR2VudXMgYW5kIG1lbHQKdGF4cmFuayA8LSAiR2VudXMiCm1lbHQgPC0gcHNTdWJfcmEgJT4lIHRheF9nbG9tKC4sIHRheHJhbmsgPSB0YXhyYW5rKSAlPiUgcHNtZWx0CgojIERlZmluZSBtYWpvciBwaHlsYQptYWpvcl9waHkgPC0gYygiRmlybWljdXRlcyIsICJBY3Rpbm9iYWN0ZXJpYSIsICJCYWN0ZXJvaWRldGVzIiwgIlByb3Rlb2JhY3RlcmlhIikKCiMgSWRlbnRpZnkgZ2VuZXJhIHByZXNlbnQgaW4gPDElIHJlbGF0aXZlIGFidW5kYW5jZSBpbiBhbGwgc2FtcGxlcwpyYXJlX2dlbmVyYSA8LSBtZWx0ICU+JQogIGdyb3VwX2J5KFNhbXBsZV9udW1iZXIsIEdlbnVzKSAlPiUKICBzdW1tYXJpemUoc3VtID0gc3VtKEFidW5kYW5jZSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShHZW51cykgJT4lCiAgc3VtbWFyaXplKG1heCA9IG1heChzdW0pKSAlPiUKICBmaWx0ZXIobWF4IDwgMSkgJT4lCiAgcHVsbChHZW51cykKCiMgQ3JlYXRlIG5ldyBjb2x1bW4gY29udGFpbmluZyBuYW1lIG9mIGdlbnVzIGlmIGFib3ZlIGN1dG9mZiBvciAiT3RoZXIgZ2VuZXJhIiBpZiBub3QKZGYgPC0gbWVsdCAlPiUKICBtdXRhdGUoUGh5X2dyb3VwID0gY2FzZV93aGVuKFBoeWx1bSAlIWluJSBtYWpvcl9waHkgfiAiT3RoZXIgcGh5bHVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBQaHlsdW0pLAogICAgICAgICBQaHlfZ3JvdXAgPSBjYXNlX3doZW4oR2VudXMgJWluJSByYXJlX2dlbmVyYSB+ICJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IFBoeV9ncm91cCksCiAgICAgICAgIFRheF9sYWJlbCA9IGNhc2Vfd2hlbihHZW51cyAlaW4lIHJhcmVfZ2VuZXJhIH4gIkFhT3RoZXIgZ2VuZXJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBHZW51cykpICU+JQogIGdyb3VwX2J5KFN1YmplY3QpICU+JQogIGFycmFuZ2UoU3ViamVjdCwgU2FtcGxlX3R5cGUpCgojIERlZmluZSBvcmRlcgpwaHlfb3JkZXIgPC0gYygiT3RoZXIgcGh5bHVtIiwKICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiwKICAgICAgICAgICAgICAgIkJhY3Rlcm9pZGV0ZXMiLAogICAgICAgICAgICAgICAiQWN0aW5vYmFjdGVyaWEiLAogICAgICAgICAgICAgICAiRmlybWljdXRlcyIpICU+JSByZXYKCmdlbl9vcmRlciA8LSBkZiAlPiUKICBzZWxlY3QoUGh5X2dyb3VwLCBUYXhfbGFiZWwpICU+JQogIG11dGF0ZShPcmRlciA9IG1hdGNoKFBoeV9ncm91cCwgcGh5X29yZGVyKSkgJT4lCiAgYXJyYW5nZShPcmRlciwgZGVzYyhUYXhfbGFiZWwpKSAlPiUKICBkaXN0aW5jdCAlPiUKICBwdWxsKFRheF9sYWJlbCkKCmdlbl9vcmRlciA8LSBmYWN0b3IoZ3N1YigiXkFhIiwgIiIsIGdlbl9vcmRlciksIGxldmVscyA9IGdzdWIoIl5BYSIsICIiLCBnZW5fb3JkZXIpKSAjIHRoZSBBYSBpcyB0byBtYWtlIHN1cmUgIk90aGVyIiBpcyBwbG90dGVkIGF0IHRoZSB0b3AKCmRmIDwtIGRmICU+JQogIG11dGF0ZShUYXhfbGFiZWwgPSBmYWN0b3IoZ3N1YigiXkFhIiwgIiIsIFRheF9sYWJlbCksIGxldmVscyA9IGdlbl9vcmRlcikpCgojIERlZmluZSBjb2xvcnMKcGh5X2NvbG9yIDwtIGRhdGEuZnJhbWUoUGh5bHVtID0gYygiQWN0aW5vYmFjdGVyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYWN0ZXJvaWRldGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlybWljdXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiksCiAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VfY29sb3IgPSBjKCIjRkZCNzI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM4MzJDRkYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzY0QzYyQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMDcyQUM4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNFOTNCNEYiKSkKCnBoeV9jb2xvciA8LSBwaHlfY29sb3JbbWF0Y2gocGh5X29yZGVyLCBwaHlfY29sb3IkUGh5bHVtKSxdCgojIERhdGEgZnJhbWUgYXMgaW5wdXQsIGRhdGEgZnJhbWUgd2l0aCBuZXcgY29sdW1uIG9mIGhleCBjb2RlcyBhcyBvdXRwdXQKY29sX3BhbGV0dGUgPC0gZGYgJT4lCiAgc2VsZWN0KFBoeV9ncm91cCwgVGF4X2xhYmVsKSAlPiUKICBkaXN0aW5jdCAlPiUKICBtdXRhdGUoSGV4X2NvZGUgPSBOQSkKCgpmb3IocGh5IGluIHBoeV9jb2xvciRQaHlsdW0pIHsKICB0ZXN0IDwtIGNvbF9wYWxldHRlICU+JQogICAgZmlsdGVyKFBoeV9ncm91cCA9PSBwaHkpICU+JQogICAgcHVsbChUYXhfbGFiZWwpICU+JQogICAgZHJvcGxldmVscyAlPiUKICAgIGxldmVscwogIAogIHRheC5jb2xvciA8LSBjb2xvclJhbXBQYWxldHRlKGMocGh5X2NvbG9yJEJhc2VfY29sb3JbbWF0Y2gocGh5LCBwaHlfY29sb3IkUGh5bHVtKV0sICJ3aGl0ZSIpKQogIGNvbHRlc3QgPC0gdGF4LmNvbG9yKGxlbmd0aCh0ZXN0KSsyKSAlPiUKICAgIC5bLWxlbmd0aCguKV0KICBjb2xfcGFsZXR0ZSRIZXhfY29kZVttYXRjaCh0ZXN0LCBjb2xfcGFsZXR0ZSRUYXhfbGFiZWwpXSA8LSBjb2x0ZXN0Cn0KCmNvbF9wYWxldHRlIDwtIGNvbF9wYWxldHRlICU+JSBhcnJhbmdlKGZhY3RvcihUYXhfbGFiZWwsIGxldmVscyA9IGdlbl9vcmRlcikpCmBgYAoKIyMjIDEuMSBPdmVydmlldyBvZiBtaWNyb2JpYWwgY29tbXVuaXR5IGNvbXBvc2l0aW9uCgpGaWd1cmUgMSBpcyBhbiBpbnRlcmFjdGl2ZSBmaWd1cmUgc2hvd2luZyB0aGUgbWljcm9iaWFsIGNvbW11bml0eSBjb21wb3NpdGlvbiBpbiBlYWNoIGNvbGxlY3RlZCBzYW1wbGUuIEhlcmUsIGVhY2ggY29sb3IgYW5kIHNoYWRlIGNvcnJlc3BvbmRzIHRvIGEgZGlmZmVyZW50IGdlbnVzLiBGb3IgcmVmZXJlbmNlLCBkb21lc3RpYyBkb2dzICgqQ2FuaXMgZmFtaWxpYXJpcyopIGFuZCBncmF5IHdvbHZlcyAoKkNhbmlzIGx1cHVzKikgYXJlIGRpZmZlcmVudCBzcGVjaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lIGdlbnVzICgqQ2FuaXMqKS4KPGJyPjxicj4KWW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoaXMgZmlndXJlIGJ5OgoKKiBIb3ZlcmluZyB0aGUgY3Vyc29yIG92ZXIgYSBjb2xvciBpbiB0aGUgc3RhY2tlZCBiYXIgdG8gc2VlIHRoZSB0YXhvbm9taWMgaWRlbnRpdHksIHNhbXBsZSB0eXBlLCBhbmQgcmVsYXRpdmUgYWJ1bmRhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBjb2xvciBhbmQgYmFyCiogQ2xpY2tpbmcgYW5kIGRyYWdnaW5nIHRoZSBjdXJzb3Igb3ZlciBhIHBvcnRpb24gb2YgdGhlIGZpZ3VyZSB0byB6b29tCiogU2luZ2xlLWNsaWNraW5nIGEgZ2VudXMncyBuYW1lIGluIHRoZSBsZWdlbmQgdG8gcmVtb3ZlIHRoYXQgZ2VudXMgZnJvbSB0aGUgZmlndXJlCiogRG91YmxlLWNsaWNraW5nIGEgZ2VudXMncyBuYW1lIGluIHRoZSBsZWdlbmQgdG8gb25seSBzaG93IHRoYXQgZ2VudXMKYGBge3IsIG91dC53aWR0aCA9ICIxMDAlIiwgZWNobyA9IEZBTFNFfQojIFBsb3QKcEJhciA8LSBwbG90X2x5KGRmLCB4ID0gflBsb3RfbGFiZWwsIHkgPSB+QWJ1bmRhbmNlLCB0eXBlID0gImJhciIsCiAgICAgICAgICAgICBjb2xvciA9IH5UYXhfbGFiZWwsIGNvbG9ycyA9IGNvbF9wYWxldHRlJEhleF9jb2RlLAogICAgICAgICAgICAgdGV4dHBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgiPGI+R2VudXM6PC9iPiIsIFRheF9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj48YnI+IiwgIjxiPlNhbXBsZSB0eXBlOjwvYj4iLCBTYW1wbGVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCAiPGI+UmVsYXRpdmUgYWJ1bmRhbmNlOjwvYj4iLCBwYXN0ZTAocm91bmQoQWJ1bmRhbmNlLCBkaWdpdHMgPSAxKSwgIiUiKSksCiAgICAgICAgICAgICBob3ZlcmluZm8gPSAidGV4dCIpICU+JQogIGxheW91dCh4YXhpcyA9IGxpc3QodGl0bGUgPSAiPGI+U2FtcGxlPC9iPiIsCiAgICAgICAgICAgICAgICAgICAgICB0aWNrcyA9ICJvdXRzaWRlIiksCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICI8Yj5SZWxhdGl2ZSBhYnVuZGFuY2UgKCUpPC9iPiIsCiAgICAgICAgICAgICAgICAgICAgICB0aWNrcyA9ICJvdXRzaWRlIiksCiAgICAgICAgIGJhcm1vZGUgPSAic3RhY2siLAogICAgICAgICBmb250ID0gbGlzdChmYW1pbHkgPSAiQXJpYWwiKSkKCnBCYXIkeCRsYXlvdXQkeWF4aXMkbGluZWNvbG9yIDwtICIjMDAwMDAwIgpwQmFyCmBgYAoqKkZpZ3VyZSAxOioqIE1pY3JvYmlhbCBjb21tdW5pdHkgY29tcG9zaXRpb24gb2YgY29sbGVjdGVkIHNhbGl2YSwgc3Rvb2wsIGFuZCBDYXBTY2FuIHNhbXBsZXMuIENhcFNjYW4gc2FtcGxlcyBhcmUgb3JkZXJlZCBmcm9tIHByb3hpbWFsIHRvIGRpc3RhbCBpbnRlc3RpbmUgKCppKi4qZSouLCBpbmNyZWFzaW5nIGRpc3RhbmNlIGZyb20gbW91dGgpLiBUYXhvbm9taWMgY29tcG9zaXRpb24gaXMgcmVwb3J0ZWQgYXQgdGhlIGdlbnVzIHJhbmsuIEdlbmVyYSBwcmVzZW50IGF0IDwxJSByZWxhdGl2ZSBhYnVuZGFuY2UgYWNyb3NzIGFsbCBzYW1wbGVzIGFyZSByZXBvcnRlZCBhcyAiT3RoZXIgZ2VuZXJhIi4gPHU+Tm90ZTo8L3U+IEJsdWUgPSAqRmlybWljdXRlcyo7IFllbGxvdyA9ICpBY3Rpbm9teWNldGVzKjsgR3JlZW4gPSAqQmFjdGVyb2lkZXRlcyo7IFJlZCA9ICpQcm90ZW9iYWN0ZXJpYSo7IFB1cnBsZSA9IGFsbCBvdGhlciBwaHlsYS4gU2hhZGVzIG9mIHRoZSBzYW1lIGNvbG9yIChleGNlcHQgcHVycGxlKSBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCBnZW5lcmEgZnJvbSB0aGUgc2FtZSBwaHlsdW0uCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQojIE9yZGluYXRpb24tYmFzZWQKcEhlYXRfb3JkIDwtIHBsb3RfaGVhdG1hcChwc1N1Yl9yYSwgbWV0aG9kID0gIk5NRFMiLCBkaXN0YW5jZSA9ICJicmF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhLmxhYmVsID0gIlN0cmFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LmxhYmVsID0gMzAwKQoKIyBSZXRyaWV2ZSByb3cgYW5kIHRheG9uIG9yZGVycwpyb3dfb3JkZXIgPC0gcEhlYXRfb3JkJHBsb3RfZW52JHRheGEub3JkZXIgJT4lIHJldgp0YXhfb3JkZXIgPC0gdGF4X3RhYmxlKHBzU3ViX3JhKVttYXRjaChyb3dfb3JkZXIsIHJvd25hbWVzKHRheF90YWJsZShwc1N1Yl9yYSkpKSxdICU+JQogIGFzLmRhdGEuZnJhbWUgJT4lCiAgbXV0YXRlKHRheG9uID0gcm93bmFtZXMoLiksCiAgICAgICAgIEFidW5kYW5jZSA9IDEsCiAgICAgICAgIFNhbXBsZSA9IHN1YmplY3QpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0KIyBQcmVwYXJlIGRhdGEKeCA8LSBwc1N1Yl9yYSAlPiUgb3R1X3RhYmxlICU+JSBhcy5kYXRhLmZyYW1lCmNvbG5hbWVzKHgpIDwtIGxhcHBseShjb2xuYW1lcyh4KSwgZ3JlcCwgc2FtcGxlX2RhdGEocHNTdWJfcmEpJFBsb3RfbGFiZWwsIHZhbHVlID0gVFJVRSkgJT4lIHVubGlzdAoKIyBBZGQgdGF4b25vbXkKeCA8LSBjYmluZCh4LCB0YXhfdGFibGUocHNTdWJfcmEpKQoKIyBSZW9yZGVyIHJvd3MgYW5kIGNvbHVtbnMgdG8gbWF0Y2ggb3JkaW5hdGlvbgp4IDwtIHhbbWF0Y2gocm93X29yZGVyLCByb3duYW1lcyh4KSksXQoKIyBTZXQgaG92ZXJ0ZXh0Cm5zYW1wIDwtIG5zYW1wbGVzKHBzU3ViX3JhKQpob3Zlcl9zdHJhaW4gPC0geFssIDE6bnNhbXBdCmhvdmVyX3N0cmFpbltdIDwtIHBhc3RlMCgiPGI+TWljcm9iZTo8L2I+ICIsIHgkU3RyYWluLCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIjxiPlJlbGF0aXZlIGFidW5kYW5jZTo8L2I+ICIpCmhvdmVyX3N0cmFpbiA8LSBhcy5tYXRyaXgoaG92ZXJfc3RyYWluKQoKaG92ZXJfYWJ1bmQgPC0geFssIDE6bnNhbXBdICU+JSByb3VuZCguLCBkaWdpdHMgPSAyKSAlPiUgYXMuZGF0YS5mcmFtZQpob3Zlcl9hYnVuZCA8LSBhcHBseShob3Zlcl9hYnVuZCwgMiwgcGFzdGUwLCAiJSIpCmhvdmVyX2FidW5kIDwtIGFzLm1hdHJpeChob3Zlcl9hYnVuZCkKCmhvdmVyX3RheCA8LSB4WywgMTpuc2FtcF0KaG92ZXJfdGF4W10gPC0gcGFzdGUwKCJcbiBcbjxiPlBoeWx1bTo8L2I+ICIsIHgkUGh5bHVtLCAiXG4iLAogICAgICAgICAgICAgICAgICAgIjxiPkNsYXNzOjwvYj4gIiwgeCRDbGFzcywgIlxuIiwKICAgICAgICAgICAgICAgICAgICI8Yj5PcmRlcjo8L2I+ICIsIHgkT3JkZXIsICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+RmFtaWx5OjwvYj4gIiwgeCRGYW1pbHksICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+R2VudXM6PC9iPiAiLCB4JEdlbnVzLCAiXG4iKQpob3Zlcl90YXggPC0gYXMubWF0cml4KGhvdmVyX3RheCkKCmhvdmVydGV4dCA8LSBtYXRyaXgocGFzdGUwKGhvdmVyX3N0cmFpbiwgaG92ZXJfYWJ1bmQsIGhvdmVyX3RheCksCiAgICAgICAgICAgICAgICBucm93ID0gbnJvdyhob3Zlcl90YXgpLCBuY29sID0gbmNvbChob3Zlcl90YXgpKQoKIyBQZXJmb3JtIGxvZzEwIHRyYW5zZm9ybWF0aW9uIG9uIHJlbGF0aXZlIGFidW5kYW5jZXMKZGF0YSA8LSBsb2coeFssIDE6bnNhbXBdLCBiYXNlID0gMTApCmRhdGFbc2FwcGx5KGRhdGEsIGlzLmluZmluaXRlKV0gPC0gTkEKYGBgCjxicj48YnI+CgojIyMgMS4yIEhpZ2gtcmVzb2x1dGlvbiBzbmFwc2hvdCBvZiBjb21tdW5pdHkgY29tcG9zaXRpb24KRmlndXJlIDIgaXMgYW4gaW50ZXJhY3RpdmUgZmlndXJlIHNob3dpbmcgdGhlIG1pY3JvYmlhbCBjb21tdW5pdHkgY29tcG9zaXRpb24gYXQgaGlnaGVyIHRheG9ub25vbWljIHJlc29sdXRpb24uIEhlcmUsIGVhY2ggcm93IGNvcnJlc3BvbmRzIHRvIGEgdW5pcXVlIG1pY3JvYmUuCjxicj48YnI+CllvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzIGZpZ3VyZSBieToKCiogSG92ZXJpbmcgdGhlIGN1cnNvciBvdmVyIGEgY2VsbCB0byBzZWUgdGhhdCBtaWNyb2JlJ3MgZ2VudXMgYW5kIHNwZWNpZXMgKGFuZCBzdHJhaW4gd2hlbiBhdmFpbGFibGUpLCByZWxhdGl2ZSBhYnVuZGFuY2UsIGFuZCBmdWxsIHRheG9ub21pYyBjbGFzc2lmaWNhdGlvbgoqIENsaWNraW5nIGFuZCBkcmFnZ2luZyB0aGUgY3Vyc29yIG92ZXIgYSBwb3J0aW9uIG9mIHRoZSBmaWd1cmUgdG8gem9vbQoKPGJyPjxicj4KYGBge3IsIG91dC5oZWlnaHQgPSAiNzUwcHgiLCBlY2hvID0gRkFMU0V9CiMgU2V0IHNhbXBsZSBuYW1lcwojY29sbmFtZXMoZGF0YSkgPC0gYygiRUJfMjY5IChzYWxpdmEpIiwgIkVCXzI3MCAoQ2FwU2NhbikiLCAiRUJfMjcxIChDYXBTY2FuKSIsCiMgICAgICAgICAgICAgICAgICAgICJFQl8yNzIgKENhcFNjYW4pIiwgIkVCXzI3MyAoQ2FwU2NhbikiLCAiRUJfMjc0IChzdG9vbCkiKQoKIyBQcmVwYXJlIHRheG9ub215IHJvdyBzaWRlCnJvd19zaWRlIDwtIHggJT4lIHNlbGVjdChQaHlsdW0pCnJvd19zaWRlJFBoeWx1bVtyb3dfc2lkZSRQaHlsdW0gJSFpbiUgbWFqb3JfcGh5XSA8LSAiT3RoZXIgcGh5bGEiCnJvd19zaWRlJFBoeWx1bSA8LSBmYWN0b3Iocm93X3NpZGUkUGh5bHVtLCBsZXZlbHMgPSBjKCJPdGhlciBwaHlsYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm90ZW9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYWN0ZXJvaWRldGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFjdGlub2JhY3RlcmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpcm1pY3V0ZXMiKSkKCiMgUGxvdApwSGVhdCA8LSBoZWF0bWFwbHkoZGF0YSwKICAgICAgICAgICAgICAgICAgIFJvd3YgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgIENvbHYgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IHZpcmlkaXM6OnZpcmlkaXMoMTApLAogICAgICAgICAgICAgICAgICAgcm93X3NpZGVfY29sb3JzID0gcm93X3NpZGUsCiAgICAgICAgICAgICAgICAgICByb3dfc2lkZV9wYWxldHRlID0gYygiQWN0aW5vYmFjdGVyaWEiID0gIiNGRkI3MjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhY3Rlcm9pZGV0ZXMiID0gIiM2NEM2MkEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpcm1pY3V0ZXMiID0gIiMwNzJBQzgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiA9ICIjRTkzQjRGIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdGhlciBwaHlsYSIgPSAiIzgzMkNGRiIpLAogICAgICAgICAgICAgICAgICAgc3VicGxvdF9tYXJnaW4gPSAwLjAxLAogICAgICAgICAgICAgICAgICAgc3VicGxvdF93aWR0aHMgPSBjKDAuOSwgMC4wNyksCiAgICAgICAgICAgICAgICAgICBzaWRlX2NvbG9yX2NvbG9yYmFyX2xlbiA9IDAuMywKICAgICAgICAgICAgICAgICAgIHBsb3RfbWV0aG9kID0gInBsb3RseSIsCiAgICAgICAgICAgICAgICAgICBjdXN0b21faG92ZXJ0ZXh0ID0gaG92ZXJ0ZXh0LAogICAgICAgICAgICAgICAgICAgeGxhYiA9ICI8Yj5TYW1wbGU8L2I+IiwKICAgICAgICAgICAgICAgICAgIHlsYWIgPSAiPGI+TWljcm9iZTwvYj4iLAogICAgICAgICAgICAgICAgICAgY29sb3JiYXJfeHBvcyA9IDEuMDE5LAogICAgICAgICAgICAgICAgICAgY29sb3JiYXJfeXBvcyA9IDAuNSwKICAgICAgICAgICAgICAgICAgIGNvbG9yYmFyX2xlbiA9IDAuMykgJT4lCiAgbGF5b3V0KHhheGlzID0gbGlzdChzaG93Z3JpZCA9IEZBTFNFKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICBzaG93dGlja2xhYmVscyA9IEZBTFNFKSwKICAgICAgICAgZm9udCA9IGxpc3QoZmFtaWx5ID0gIkFyaWFsIikpICU+JQogIGNvbG9yYmFyKHRpdGxlID0gIlJlbGF0aXZlIGFidW5kYW5jZSIsCiAgICAgICAgICAgdGlja3ZhbHMgPSBjKC0xLCAwLCAxKSwKICAgICAgICAgICB0aWNrdGV4dCA9IGMoIjAuMSUiLCAiMSUiLCAiMTAlIikpCgojIEZvcm1hdCByb3cgc2lkZQpwSGVhdCR4JGxheW91dCR4YXhpczIkdGlja3RleHQgPC0gIlBoeWx1bSIKcEhlYXQkeCRsYXlvdXQkeGF4aXMkbGluZWNvbG9yIDwtICIjMDAwMDAwIgpwSGVhdCR4JGxheW91dCR4YXhpczIkbGluZWNvbG9yIDwtICIjMDAwMDAwIgpwSGVhdCR4JGxheW91dCR5YXhpcyRsaW5lY29sb3IgPC0gIiMwMDAwMDAiCnBIZWF0JHgkbGF5b3V0JGxlZ2VuZCR5YW5jaG9yIDwtICJib3R0b20iCnBIZWF0CmBgYAoqKkZpZ3VyZSAyOioqIEhlYXQgbWFwIHNob3dpbmcgcmVsYXRpdmUgYWJ1bmRhbmNlIG9mIG1pY3JvYmVzIGluIGVhY2ggc2FtcGxlIChOID0gMjY2IHRvdGFsIGlkZW50aWZpZWQpLiBFYWNoIHJvdyBjb3JyZXNwb25kcyB0byBhIHVuaXF1ZSBtaWNyb2JlIGFuZCBlYWNoIGNvbHVtbiBjb3JyZXNwb25kcyB0byBhbiBpbmRpdmlkdWFsIHNhbXBsZS4gTm90ZSB0aGUgcmVsYXRpdmUgYWJ1bmRhbmNlIGNvbG9yc2NhbGUgaXMgaW4gbG9nIHVuaXRzLgoKPGJyPjxicj4KCgojIyMgMS4zIE5vdGFibGUgbWljcm9iZXMgZGV0ZWN0ZWQKCiogKlJhb3VsdGVsbGEgb3JuaXRoaW5vbHl0aWNhKjoKICAqIFByZXZpb3VzbHkgaWRlbnRpZmllZCBzdHJhaW5zIHByb2R1Y2UgaGlzdGFtaW5lIGZyb20gaGlzdGlkaW5lIChhbiBhbWlubyBhY2lkKSAoS2Fua2kgKmV0IGFsKi4sIDIwMDIpLCB3aGljaCBjYW4gdHJpZ2dlciBhbiBpbmZsYW1tYXRvcnkgcmVzcG9uc2UgYnkgdGhlIGltbXVuZSBzeXN0ZW0KICAqIEZvdW5kIGluIGhpZ2ggcmVsYXRpdmUgYWJ1bmRhbmNlIGluIHByb3hpbWFsIENhcFNjYW4gc2FtcGxlcyAofjE1LTI1JSkKPGJyPjxicj4KKiAqS2xlYnNpZWxsYSBwbmV1bW9uaWFlKjoKICAqIEEga25vd24gY2F1c2Ugb2YgcG5ldW1vbmlhIGJ5IGluZHVjaW5nIGluZmxhbW1hdGlvbiB1cG9uIGNvbG9uaXphdGlvbiBvZiB0aGUgbHVuZ3M7IGdyb3dpbmcgaW50ZXJlc3QgaW4gdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiAqS2xlYnNpZWxsYSBwbmV1bW9uaWFlKiBhbmQgaW5mbGFtbWF0b3J5IGJvd2VsIGRpc2Vhc2VzIChyZXZpZXdlZCBpbiBLYXVyICpldCBhbCouLCAyMDE4KQogICogRGV0ZWN0ZWQgaW4gQ2FwU2NhbiBzYW1wbGVzICh+MiUgcmVsYXRpdmUgYWJ1bmRhbmNlKSBidXQgbm90IHN0b29sCiAgCjxicj48YnI+CgoKIyMjIDEuNCBSZWZlcmVuY2VzCgpLYW5raSwgTS4sIFlvZGEsIFQuLCBUc3VrYW1vdG8sIFQuLCBhbmQgU2hpYmF0YSwgVC4gKDIwMDIpICpLbGVic2llbGxhIHBuZXVtb25pYWUqIHByb2R1Y2VzIG5vIGhpc3RhbWluZTogKlJhb3VsdGVsbGEgcGxhbnRpY29sYSogYW5kICpSYW91bHRlbGxhIG9taXRoaW5vbHl0aWNhKiBzdHJhaW5zIGFyZSBoaXN0YW1pbmUgcHJvZHVjZXJzLiAqQXBwbCBFbnZpcm9uIE1pY3JvYmlvbCogNjg6IDM0NjLigJMzNDY2Lgo8YnI+PGJyPgpLYXVyLCBDLlAuLCBWYWRpdmVsdSwgSi4sIGFuZCBDaGFuZHJhbWF0aGksIFMuICgyMDE4KSBJbXBhY3Qgb2YgKktsZWJzaWVsbGEgcG5ldW1vbmlhZSogaW4gbG93ZXIgZ2FzdHJvaW50ZXN0aW5hbCB0cmFjdCBkaXNlYXNlcy4gKkogRGlnIERpcyogMTk6IDI2MuKAkzI3MS4=